//
// Created by LiuYou on 2021/5/20.
//

#include <cstdlib>
#include <unistd.h>
#include <cstdio>
#include <sys/wait.h>


int main() {
    std::puts("Begin!");

    std::fflush(nullptr);
    pid_t pid = fork();
    if (pid < 0) {
        std::perror("fork()");
        std::exit(1);
    } else if (pid == 0) {
//        execl("/usr/bin/date", "date", "+%s", nullptr);
        // TODO 注意: 这里的arg参数就是指定变成的进程的名字,
        //  这个名字是可以随便起的。
        //  李慧琴老师说到了木马病毒有些就是这里随便起一个可以糊弄用户的名字,
        //  让用户感觉这个子进程的名字不是木马。
        execl("/usr/bin/date", "httpd", "+%s", nullptr);
        std::perror("execl()");
        std::exit(1);
    } else {
        // parent process
        // 这里使用的是阻塞的wait, 它就一直等什么时候子进程结束, 然后释放子进程的资源。
        wait(nullptr);
    }

    std::puts("End!");

    std::exit(0);
}